<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../VueJs/vue.js"></script>
</head>

<body>
    <!-- 
		computed和watch之间的区别：
			1.computed能完成的功能，watch都可以完成。
			2.watch能完成的功能，computed不一定能完成，例如：watch可以进行异步操作。
		两个重要的小原则：
			1.所被Vue管理的函数，最好写成普通函数，这样this的指向才是vm 或 组件实例对象。
			2.所有不被Vue所管理的函数（定时器的回调函数、ajax的回调函数等、Promise的回调函数），最好写成箭头函数，
			这样this的指向才是vm 或 组件实例对象。

            (1) computed计算属性不可开启异步维持数据,是靠return返回值维持数据 ; watch靠手动写代码维持数据(computed函数不能有异步；watch可以)
            (2) computed函数所依赖的属性不变的时候会调用缓存；watch每次监听的值发生变化时候都会调用回调
            (3) computed必须有return；watch可以没有

		-->
    <div id="root">
        姓：<input type="text" v-model="firstName"><br>
        名：<input type="text" v-model="lastName"><br>
        姓名：<span>{{fullName}}</span>
    </div>
</body>
<script>
    Vue.config.productionTip = false;
    Vue.config.devtools = true;

    const vm = new Vue({
        el: '#root',
        data: {
            firstName: "张",
            lastName: '三',
            fullName: ""
        },
        watch: {
            firstName: {
                immediate: true,
                handler(newValue, oldValue) {
                    // this.fullName = `${this.firstName}-${this.lastName}`;
                    // this.fullName = `${newValue}-${this.lastName}`;
                    setTimeout(() => {
                        this.fullName = `${newValue}-${this.lastName}`
                    }, 1000);
                }
            },
            lastName: {
                immediate: true,
                handler(newValue, oldValue) {
                    // this.fullName = `${this.firstName}-${this.lastName}`;
                    this.fullName = `${this.firstName}-${newValue}`;
                }
            }
        }
    });
</script>

</html>